package deep.projects.newsapp.beans;

import android.os.Parcel;
import android.os.Parcelable;
import android.util.Log;

import com.wuxinwudai.android.database.EntityBase;

import org.json.JSONException;
import org.json.JSONObject;

import java.net.URLDecoder;


/**
 * News 类为新闻信息类
 * @author 吾心无待 于2016年03月05日
 */
public class News extends EntityBase implements Parcelable{
    private String title;//新闻标题
    private int newsTypeId;//新闻分类ID
    private String createTime;//创建时间
    private int commentNo;//评论数
    private String imageUri;//新闻图片
    private String url;//新闻存放的地址



    /**
     * 获取新闻创建时间
     * @return 新闻创建时间
     */
    public String getCreateTime() {
        return createTime;
    }

    /**
     * 设置新闻发布时间
     * @param createTime 新闻创建时间
     */
    public void setCreateTime(String createTime) {
        this.createTime = createTime;
    }

    /**
     * 获取新闻标题
     * @return 新闻标题
     */
    public String getTitle() {
        return title;
    }

    /**
     * 设置新闻标题
     * @param title 新闻标题
     */
    public void setTitle(String title) {
        this.title = title;
    }

    /**
     * 获取新闻分类 ID
     * @return 新闻分类 id
     */
    public int getNewsTypeId() {
        return newsTypeId;
    }

    /**
     * 设置新闻分类 ID
     * @param newsTypeId 新闻分类 id
     */
    public void setNewsTypeId(int newsTypeId) {
        this.newsTypeId = newsTypeId;
    }

    /**
     * 获取新闻评论次数
     * @return 评论次数
     */
    public int getCommentNo() {
        return commentNo;
    }

    /**
     * 设置新闻评论次数
     * @param commentNo 评论次数
     */
    public void setCommentNo(int commentNo) {
        this.commentNo = commentNo;
    }

    /**
     * 获取图片的 Uri
     * @return 图片地址
     */
    public String getImageUri() {
        return imageUri;
    }

    /**
     * 设置图片的 Uri
     * @param imageUri 图片地址
     */
    public void setImageUri(String imageUri) {
        this.imageUri = imageUri;
    }

    /**
     * 获取新闻链接地址
     * @return 新闻链接
     */
    public String getUrl(){
        return this.url;
    }

    /**
     * 设置新闻链接的地址
     * @param url 新闻链接
     */
    public void setUrl(String url){
        this.url = url;
    }
    /**
     * 用于详情接口，从 JSONObject 序列化出 News 对象
     * @param obj 从 JSONObject 获取对象
     * @return News 对象
     * @throws JSONException
     */
    public static News detailFrom(JSONObject obj) throws JSONException {
        News n = new News();
        n.setId(obj.getInt("ID"));
        n.setTitle(obj.getString("Title"));
        n.setCreateTime(obj.getString("CreateTime"));
        n.setCommentNo(obj.getInt("CommentNo"));
        n.setImageUri(URLDecoder.decode(obj.getString("ImageUri")));
        Log.i("NEWS",n.getImageUri());
        n.setNewsTypeId(obj.getInt("NewsTypeId"));
        n.setUrl(obj.getString("Url"));
        return n;
    }

    /**
     * 工厂方法创建 News 类的一个新实例
     * @param id 新闻 id
     * @param newsTypeId 新闻类型 Id
     * @param title 标题
     * @param imageUri 新闻缩略图
     * @param url 浏览的页面
     * @param commentNo 评论数
     * @return 新闻对象
     */
    public static News create(int id,int newsTypeId,String title,String imageUri,String url,int commentNo){
        News n = new News();
        n.setNewsTypeId(newsTypeId);
        n.setId(id);
        n.setTitle(title);
        n.setUrl(url);
        n.setImageUri(imageUri);
        n.setCommentNo(commentNo);
        return n;
    }
    /**
     * 用于列表接口，从 JSONObject 序列化出 News 对象
     * @param obj 从 JSONObject 获取对象
     * @return News 对象
     * @throws JSONException
     */
    public static News itemFrom(JSONObject obj) throws JSONException{
        News n = new News();
        n.setId(obj.getInt("ID"));
        n.setTitle(obj.getString("Title"));
        n.setCreateTime(obj.getString("CreateTime"));
        n.setCommentNo(obj.getInt("CommentNo"));
        n.setImageUri(URLDecoder.decode(obj.getString("ImageUri")));
        Log.i("NEWS",n.getImageUri());
        n.setNewsTypeId(obj.getInt("NewsTypeId"));
        n.setUrl(obj.getString("Url"));
        return n;
    }
    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(this.title);
        dest.writeInt(this.newsTypeId);
        dest.writeString(this.createTime);
        dest.writeInt(this.commentNo);
        dest.writeString(this.imageUri);
        dest.writeString(this.url);
    }

    public News() {
    }

    protected News(Parcel in) {
        this.title = in.readString();
        this.newsTypeId = in.readInt();
        this.createTime = in.readString();
        this.commentNo = in.readInt();
        this.imageUri = in.readString();
        this.url = in.readString();
    }

    public static final Parcelable.Creator<News> CREATOR = new Parcelable.Creator<News>() {
        public News createFromParcel(Parcel source) {
            return new News(source);
        }

        public News[] newArray(int size) {
            return new News[size];
        }
    };


}
